from student import *


class StudentManager(object):
    def __init__(self):
        # 学生列表
        self.student_list = []

    # 运行系统
    def run(self):
        # 从文件中加载学生数据
        self.load_student()
        while True:
            # 显示功能菜单
            self.show_menu()
            # 用户输入目标功能序号
            menu_num = input('请输入您需要的功能序号：')
            # 根据用户输入的序号执行不同的功能
            if menu_num == '1':       # 添加学生信息
                # print('添加学生信息')
                self.add_student()
            elif menu_num == '2':     # 删除学生信息
                # print('删除学生信息')
                self.del_student()
            elif menu_num == '3':     # 修改学生信息
                # print('修改学生信息')
                self.modify_student()
            elif menu_num == '4':     # 查询学生信息
                # print('查询学生信息')
                self.search_student()
            elif menu_num == '5':     # 显示所有学生信息
                # print('显示所有学生信息')
                self.show_student()
            elif menu_num == '6':     # 保存学生信息
                # print('保存学生信息')
                self.save_student()
            elif menu_num == '7':     # 退出系统
                print('谢谢使用！')
                break
            else:
                print('输入有误！')

    # 显示功能菜单
    @staticmethod
    def show_menu():
        print('=' * 22)
        print('学生管理系统 V1.0')
        print('1.添加学生信息')
        print('2.删除学生信息')
        print('3.修改学生信息')
        print('4.查询学生信息')
        print('5.显示所有学生信息')
        print('6.保存学生信息')
        print('7.退出系统')
        print('=' * 22)


    # 添加学生信息
    def add_student(self):
        # 用户输入姓名、性别、手机号
        name = input('请输入学生的姓名：')
        gender = input('请输入学生的性别：')
        tel = input('请输入学生的手机号：')
        # 创建Student类的对象
        student = Student(name, gender, tel)
        # 将刚创建的对象添加到学生列表中
        self.student_list.append(student)
        print('添加成功！')
        print(student)

    # 删除学生信息
    def del_student(self):
        # 用户输入目标学生姓名
        del_name = input('请输入要删除的学生姓名：')
        # 遍历学生列表
        for studet in self.student_list:
            if del_name == studet.name:  # 学生存在
                # 从学生列表中删除学生
                self.student_list.remove(studet)
                print('删除成功！')
                break
        else:  # 学生不存在
            print('查无此人！')

    # 修改学生信息
    def modify_student(self):
        # 用户输入目标学生姓名
        modify_name = input('请输入要修改的学生姓名：')
        # 遍历学生列表
        for student in self.student_list:
            if modify_name == student.name:  # 学生存在
                student.name = input('姓名：')
                student.gender = input('性别：')
                student.tel = input('手机号：')
                print('修改成功！')
                print(student)
                break
        else:  # 学生不存在
            print('查无此人！')

    # 查询学生信息
    def search_student(self):
        # 用户输入目标学生姓名
        search_name = input('请输入您要查询的学生姓名：')
        # 遍历学生列表
        for student in self.student_list:
            if search_name == student.name:  # 学生存在
                print(student)  # 输出学生对象的描述信息
                break
        else:  # 学生不存在
            print('查无此人！')

    # 显示所有学生信息
    def show_student(self):
        # 输出表头
        print('姓名\t性别\t手机号')
        # 输出表格的内容
        for student in self.student_list:
            print(f'{student.name}\t{student.gender}\t{student.tel}')

    # 保存学生信息
    def save_student(self):
        # 打开文件
        file = open('student.data', 'w', encoding='utf-8')
        # 将列表里面的学生对象转换成字典
        new_list = [i.__dict__ for i in self.student_list]
        # 将列表转换成字符串后写入到文件中
        file.write(str(new_list))
        # 关闭文件
        file.close()
        print('保存成功！')

    # 加载学生信息
    def load_student(self):
        try:
            # 尝试以只读的模式打开文件
            file = open('student.data', 'r', encoding='utf-8')
        except:
            # 若程序抛出异常，则尝试以读写的模式打开文件
            file = open('student.data', 'w', encoding='utf-8')
        else:
            data = file.read()  # 从文件读取数据，返回包含学生信息的字符串
            if data != '':
                # 将字符串的内容还原成列表
                new_list = eval(data)
                # 根据姓名、性别、手机号创建Student类的对象
                self.student_list = [Student(i['name'], i['gender'], i['tel']) for i in new_list]
        finally:
            # 关闭文件
            file.close()


